package com.dyrj.jzb.service;

import com.dyrj.jzb.po.*;

/**
 * @Title: JzbApiService
 * @Description: 见证宝接口调用服务
 * @Author
 */
public interface JzbApiService {

    //-----01 开户 ----- beg //
    /**
     * KFEJZB6000	会员子账户开立	OpenCustAcctId
     * @param tranNetMemberCode 交易网会员代码 平台端的用户ID，需要保证唯一性，可数字字母混合，如HY_120，若需要开通智能收款要求后6位是数字，该6位数字为智能收款账号后6位，因账号前几位固定故后6位不能重复。
     * @param userNickname 用户昵称
     * @param mobile 手机号码
     * @param email 邮箱
     * @return
     */
    Po6000OpenCustAcctId Api6000OpenCustAcctId(String tranNetMemberCode, String userNickname,String mobile, String email);
    /**
     * KFEJZB6092	根据会员代码查询会员子账号	QueryCustAcctIdByThirdCustId
     * 根据在平台的会员ID查询银行的子账户号。
     * @param tranNetMemberCode 交易网会员代码 平台端的用户ID，需要保证唯一性，可数字字母混合，如HY_120，若需要开通智能收款要求后6位是数字，该6位数字为智能收款账号后6位，因账号前几位固定故后6位不能重复。
     * @return
     */
    Po6092QueryCustAcctIdByThirdCustId Api6092QueryCustAcctIdByThirdCustId(String tranNetMemberCode);
    //-----01 开户 ----- end //


    //-----02 绑卡 ----- beg //
    /**
     * KFEJZB6066	会员绑定提现账户-银联鉴权	BindRelateAcctUnionPay
     * 用于会员申请绑定提现账户，申请后银行前往银联验证卡信息：姓名、证件、卡号、银行预留手机是否相符，相符则发送给会员手机动态验证码并返回成功，不相符则返回失败。
     * 平台接收到银行返回成功后，进入输入动态验证码的页面，有效期120秒，若120秒未输入，客户可点击重新发送动态验证码，这个步骤重新调用该接口即可。
     * 平安银行的账户，大小额行号和超级网银号都不用送。
     * 超级网银号：单笔转账金额不超过5万，不限制笔数，只用选XX银行，不用具体到支行，可实时知道对方是否收款成功。
     * 大小额联行号：单笔转账可超过5万，需具体到支行，不能实时知道对方是否收款成功。金额超过5万的，在工作日的8点30-17点间才会成功。
     * @param subAcctNo 见证子账户的账号
     * @param tranNetMemberCode 交易网会员代码
     * @param memberName 见证子账户的户名
     * @param memberGlobalType 会员证件类型
     * @param memberGlobalId 会员证件号码
     * @param memberAcctNo 会员的待绑定账户的账号
     * @param bankType 会员的待绑定账户的本他行类型
     * @param acctOpenBranchName 会员的待绑定账户的开户行名称
     * @param cnapsBranchId 会员的待绑定账户的开户行的联行号
     * @param eiconBankBranchId 会员的待绑定账户的开户行的超级网银行号
     * @param mobile 会员的手机号
     * @return
     */
    Po6066BindRelateAcctUnionPay Api6066BindRelateAcctUnionPay(String subAcctNo, String tranNetMemberCode, String memberName, String memberGlobalType, String memberGlobalId, String memberAcctNo, String bankType, String acctOpenBranchName, String cnapsBranchId, String eiconBankBranchId, String mobile);
    /**
     * KFEJZB6067	会员绑定提现账户-回填银联鉴权短信码	BindRelateAccReUnionPay
     * 用于会员填写动态验证码后，发往银行进行验证，验证成功则完成绑定。
     * @param subAcctNo 见证子账户的账号
     * @param tranNetMemberCode 交易网会员代码
     * @param memberAcctNo 会员的待绑定账户的账号
     * @param messageCheckCode 短信验证码
     * @return
     */
    Po6067BindRelateAccReUnionPay Api6067BindRelateAccReUnionPay(String subAcctNo, String tranNetMemberCode, String memberAcctNo, String messageCheckCode);
    /**
     * KFEJZB6098	会员绑定信息查询	MemberBindQuery
     * 查询标志为“单个会员”的情况下，返回该会员的有效的绑定账户信息。
     * 查询标志为“全部会员”的情况下，返回市场下的全部的有效的绑定账户信息。
     * 查询标志为“单个会员的证件信息”的情况下，返回市场下的指定的会员的留存在电商见证宝系统的证件信息。
     * @param subAcctNo 见证子账户的账号
     * @return
     */
    Po6098MemberBindQuery Api6098MemberBindQuery(String subAcctNo);
    /**
     * KFEJZB6138	维护会员绑定提现账户联行号	MntMbrBindRelateAcctBankCode
     * 此接口可以支持市场修改会员的提现账户的开户行信息，具体包括开户行行名、开户行的银行联行号（大小额联行号）和超级网银行号。
     * @param subAcctNo 见证子账户的账号
     * @param memberBindAcctNo 会员绑定账号
     * @param acctOpenBranchName 会员的待绑定账户的开户行名称
     * @param cnapsBranchId 会员的待绑定账户的开户行的联行号
     * @param eiconBankBranchId 会员的待绑定账户的开户行的超级网银行号
     * @return
     */
    Po6138MntMbrBindRelateAcctBankCode Api6138MntMbrBindRelateAcctBankCode(String subAcctNo, String memberBindAcctNo, String acctOpenBranchName, String cnapsBranchId, String eiconBankBranchId);

    /**
     * KFEJZB6065	会员解绑提现账户	UnbindRelateAcct
     * 此接口可以支持会员解除名下的绑定账户关系
     * @param tranNetMemberCode 交易网会员代码
     * @param subAcctNo 见证子账户的账号
     * @param memberAcctNo 待解绑的提现账户的账号
     * @return
     */
    Po6065UnbindRelateAcct Api6065UnbindRelateAcct(String subAcctNo, String tranNetMemberCode, String memberAcctNo);



    //-----02 绑卡 ----- end //

    //-----03 提现 ----- beg //
    /**
     * KFEJZB6010	查询银行子账户余额	CustAcctIdBalanceQuery
     * 查询会员子账户以及平台的功能子账户的余额。
     * @param subAcctNo 见证子账户的账号
     * @return
     */
    Po6010CustAcctIdBalanceQuery Api6010CustAcctIdBalanceQuery(String subAcctNo);
    /**
     * KFEJZB6037	查询会员子账号	QueryCustAcctId
     * 根据在平台的会员ID查询银行的子账户号。
     * @param tranNetMemberCode 市场的会员代码
     * @return
     */
    Po6037QueryCustAcctId Api6037QueryCustAcctId(String tranNetMemberCode);


    /**
     * KFEJZB6082	申请提现或支付短信动态码	ApplicationTextMsgDynamicCode
     * 用于有需要进行短信动态码验证的平台，申请短信动态验证码，以便于【6085】、接口的交易进行短信动态码验证。
     * @param subAcctNo             见证子账户的账号
     * @param tranNetMemberCode	    市场的会员代码
     * @param tranType              交易类型 1：提现 2：支付 3：批次号支付 4：批次号作废
     * @param tranAmt               交易金额 按批次号提现时非必输
     * @param bankCardNo            银行卡号
     * @param orderNo               订单号 按批次号提现时，此字段必须，上送批次号字段
     * @return
     */
    Po6082ApplicationTextMsgDynamicCode Api6082ApplicationTextMsgDynamicCode(String subAcctNo, String tranNetMemberCode, String tranType, String tranAmt, String bankCardNo, String orderNo);
    /**
     * KFEJZB6085	会员提现-支持手续费	MemberWithdrawCash
     * 此接口受理会员发起的提现申请。会员子账户的可提现余额、可用余额会减少，市场的资金汇总账户(监管账户)会减少相应的发生金额，提现到会员申请的收款账户。
     * 与【6033】接口相比，此接口可以支持市场收取会员的提现申请交易的手续费，可以支持通过短信验证码验证会员发起的提现申请的真实性。
     * @param subAcctNo	            见证子账户的账号
     * @param tranNetMemberCode	    市场的会员代码
     * @param subAcctName	        见证子账户的户名
     * @param takeCashAcctNo	    收款账户的账号
     * @param takeCashAcctName	    收款账户的户名
     * @param cashAmt	            申请提现的金额
     * @param takeCashCommission    市场收取的手续费
     * @param messageOrderNo	    短信验证码指令号
     * @param messageCheckCode	    短信验证码
     * @return
     */
    Po6085MemberWithdrawCash Api6085MemberWithdrawCash(String subAcctNo, String tranNetMemberCode, String subAcctName, String takeCashAcctNo, String takeCashAcctName, String cashAmt, String takeCashCommission, String messageOrderNo, String messageCheckCode);
    /**
     * KFEJZB6110	查询银行单笔交易状态	SingleTransactionStatusQuery
     * 查询单笔交易的状态
     * @param subAcctNo 见证子账户的账号
     * @param functionFlag 功能标志 2：会员间交易 3：提现 4：充值
     * @param tranNetSeqNo 交易网流水号 提现，充值或会员交易请求时的CnsmrSeqNo值
     * @param tranDate 交易日期
     * @return
     */
    Po6110SingleTransactionStatusQuery Api6110SingleTransactionStatusQuery(String subAcctNo, String functionFlag, String tranNetSeqNo, String tranDate);
    /**
     * KFEJZB6048	查询银行提现退单信息	BankWithdrawCashBackQuery
     * 通过大小额支付系统进行的提现交易，会存在被收款行退票的情况。本接口用于查询此类退票交易的记录，可以退票日期为区间查询该段时间区间内的退票记录。
     * 退单情况体现为原提现流水成功，但会有一笔退回来的新入账流水，提现的子账户余额重新自动增加。举例：A提现100元，该笔提现指令显示提现成功，A的余额减少100元。后续若退回来了，平台会查询到A有100元的入账，A的余额增加100元。通过此接口可以知道该笔入账是原来提现操作所退回来的。
     * @param functionFlag 功能标志 1-提现退票 2-小额鉴权退票
     * @param startDate 开始日期 若是指定时间段查询，则必输，当查询全部时，不起作用	格式：20181201
     * @param endDate 终止日期 若是指定时间段查询，则必输，当查询全部时，不起作用
     * @param pageNum 页码 起始值为1，每次最多返回20条记录，第二页返回的记录数为第21至40条记录，第三页为41至60条记录，顺序均按照建立时间的先后
     * @return
     */
    Po6048BankWithdrawCashBackQuery Api6048BankWithdrawCashBackQuery(String functionFlag, String startDate, String endDate, String pageNum);
    //-----03 提现 ----- end //

    //-----04 收单入账 平台补账 ----- beg //
    /**
     * KFEJZB6145	调账-见证收单	AccountRegulation
     * 见证+收单模式，若前一日存在子账户记账失败的情况(如平台上送子钱包信息错误)，对应清算资金挂在快收专属子账户，平台核实资金归属后，调用该接口，将资金清分到具体的会员子账户。(需要关联原资金流水)
     * @param orderNo 订单号 下单时的子订单号，不是总订单号，详见《电商见证宝开发说明V1.0.docx》的2.4章节
     * @param subAcctNo 见证子账户的账号
     * @param tranNetMemberCode 交易网会员代码
     * @param subAcctName 见证子账户的名称
     * @param amt 金额
     * @param ccy 币种 默认：RMB
     * @param remark 备注
     * @return
     */
    Po6145AccountRegulation Api6145AccountRegulation(String orderNo, String subAcctNo, String tranNetMemberCode, String subAcctName, String amt, String ccy, String remark);
    /**
     * KFEJZB6146	查询充值明细-见证收单	ChargeDetailQuery
     * 查询充值明细交易的状态
     * @param orderNo 订单号 下单时的子订单号，不是总订单号，详见《电商见证宝开发说明V1.0.docx》的2.4章节
     * @return
     */
    Po6146ChargeDetailQuery Api6146ChargeDetailQuery(String orderNo);
    /**
     * KFEJZB6147	平台补账-见证收单	PlatformAccountSupply
     * 见证+收单模式，对收单系统支付成功但未报送给见证的充值订单流水，平台可调用该接口，对漏报的订单号进行补发在途充值(补账)的操作
     * @param orderNo 订单号 下单时的子订单号，不是总订单号，详见《电商见证宝开发说明V1.0.docx》的2.4章节
     * @param amt 金额
     * @return
     */
    Po6147PlatformAccountSupply Api6147PlatformAccountSupply(String orderNo, String amt);
    //-----04 收单入账 平台补账 ----- end //

    //-----05 子账户间交易 验证短信码 ----- beg //
    /**
     * KFEJZB6164	会员间交易退款-不验证	MemberTransactionRefund
     * 用于会员间交易做售后退款处理。从卖方子账户扣退款金额（不含退款手续费），如退手续费金额大于0，则从退款垫款户（默认为平台自有一般账户）扣该退手续费金额，支付给买方子账户可用金额（T+1日变为可提现）。
     * @param orderNo 订单号 下单时的子订单号，不是总订单号，详见《电商见证宝开发说明V1.0.docx》的2.4章节
     * @param amt 金额
     * @return
     */
    Po6164MemberTransactionRefund Api6164MemberTransactionRefund(String orderNo, String amt);
    /**
     * KFEJZB6007	会员资金冻结-不验证	MembershipTrancheFreeze
     * 本接口可以实现减少会员的余额，增加市场的担保子账户的余额。资金从会员子账户划转到担保子账户后，可用于支付到其他的会员子账户或被解冻退回。
     * 跟“【6034】会员间交易”相比，进行会员资金冻结的操作，不须要明确最终的收款方信息。
     * @param functionFlag	    功能标志
     * @param subAcctNo	        见证子账户的账号
     * @param tranNetMemberCode	交易网会员代码
     * @param tranAmt	        交易金额
     * @param tranCommission	交易手续费
     * @param orderNo	        订单号
     * @param orderContent	    订单内容
     * @return
     */
    Po6007MembershipTrancheFreeze ApiPo6007MembershipTrancheFreeze(String functionFlag, String subAcctNo, String tranNetMemberCode, String tranAmt, String tranCommission, String orderNo, String orderContent);


    Po6031PlatformOrderManagement Api6031PlatformOrderManagement(String orderNo, String amt);

    // 缺接口 6101 会员间交易-验证短信动态码	子账户之间的付款

    //-----05 子账户间交易 验证短信码 ----- end //


}
